/**
  ******************************************************************************
  * @file           : test_socket.cpp
  * @author         : wangyingjie
  * @brief          : None
  * @attention      : None
  * @date           : 2025/7/1
  ******************************************************************************
  */


#include "network/socket/studio_udp.h"
#include "network/socket/studio_tcp_client.h"
//#include "network/socket/studio_tcp_server.h"
#include <iostream>
#include <thread>
#include <chrono>


//// 普通函数作为回调
//void on_receive(const std::string& msg, const udp::endpoint& ep)
//{
//    // std::cout << "[Received] from " << ep.address().to_string() << ":" << ep.port() << " (" << data.size() << " bytes): " << data << std::endl;
//    std::cout << "Received size: " << std::dec << msg.size() << " bytes :";
//    for (unsigned char c : msg)
//    {
//        // 以两位16进制格式输出每个字符
//        // std::cout << std::setw(2) << std::setfill('0') << std::hex << (int)c << " ";  // 小写
//        std::cout << "\t" << std::setw(2) << std::setfill('0') << std::hex << std::uppercase << (int)c << " ";
//    }
//
//    std::cout << std::endl;
//}
//
//
//int main()
//{
//    try
//    {
//        studio_udp udp(
//            "0.0.0.0",
//            8087,
//            "192.168.1.2",
//            8087
//            );
//        // 设置普通函数作为回调
//        udp.set_receive_callback(on_receive);
//
//        if (udp.start())
//        {
//            std::cout << "UDP service started..." << std::endl;
//        }
//        else
//        {
//            std::cerr << "Failed to start UDP service." << std::endl;
//        }
//        int count = 0;
//        while (true)
//        {
//            count = count % 100 + 1;
//            udp.send(std::to_string(count));
//            std::this_thread::sleep_for(std::chrono::seconds(1));
//        }
//    }
//    catch (const std::exception& ex)
//    {
//        std::cerr << "Exception: " << ex.what() << std::endl;
//    }
//
//    return 0;
//}


// /////////////////// tcp client ///////////////////
//

// // 自定义的接收数据处理函数
 void on_message_received_client(const std::string& msg)
 {
     std::cout << "Received size: " << std::dec << msg.size() << " bytes :";
     for (unsigned char c : msg)
     {
         // 以两位16进制格式输出每个字符
         // std::cout << std::setw(2) << std::setfill('0') << std::hex << (int)c << " ";  // 小写
         std::cout << "\t" << std::setw(2) << std::setfill('0') << std::hex << std::uppercase << (int)c << " ";
     }

     std::cout << std::endl;
 }

 int main()
 {
     // 创建客户端，默认缓冲区大小 (4KB)
     // studio_tcp client("192.168.1.2", "8087");
     studio_tcp_client client("127.0.0.1", "18080", 20);

     // 设置接收数据的回调函数
     client.set_message_handler(on_message_received_client);

     // 启动客户端
     client.start();

     std::this_thread::sleep_for(std::chrono::seconds(1));

     // 一秒发送一个心跳 1~100
     int count = 0;
     while (true)
     {
         count = count % 100 + 1;
         client.send(std::to_string(count));
         std::this_thread::sleep_for(std::chrono::seconds(1));
     }

     client.stop();
     return 0;
 }


// /////////////////// tcp server ///////////////////
//
// void on_message_received(const std::string& msg, std::shared_ptr<tcp_session> session)
// {
//     std::cout << "[From " << session->get_remote_endpoint() << "] Received: " << msg << std::endl;
//     // 回复客户端
//     session->send("Echo: " + msg);
// }
//
// int main()
// {
//     // 创建 TCP 服务端，监听 0.0.0.0:8087
//     studio_tcp_server server("0.0.0.0", "8087");
//
//     // 设置接收消息的回调
//     server.set_message_handler(on_message_received);
//
//     // 启动服务端
//     server.start();
//
//     // 广播心跳
//     int count = 0;
//     while (true)
//     {
//         count = count % 100 + 1;
//         server.broadcast(std::to_string(count));
//         std::this_thread::sleep_for(std::chrono::seconds(1));
//     }
//
//     server.stop();
//     return 0;
// }